<?php
/**
* @param string
* 
* @desc Заменяет ссылки на их HTML-эквиваленты.
* 
* @return string
*/
function smarty_modifier_hrefActivate($value) 
{
    return preg_replace_callback(
    '{
        (?:
        (\w+://)                # протокол с двумя слэшами
        |                       # - или -
        www\.                   # просто начинается на www
        )
        [\w-]+(\.[\w-]+)*       # имя хоста
        (?: : \d+)?             # порт (не обязателен)
        [^<>"\'()\[\]\s]*       # URI (но БЕЗ кавычек и скобок)
        (?:                     # последний символ должен быть...
          (?<! [[:punct:]] )        # НЕ пунктуацией
        | (?<= [-/&+*]     )        # но допустимо окончание на -/&+*
        )
    }xis',
    "hrefCallback",
    $value
    );
}

// Функция обратного вызова для preg_replace_callback().
function hrefCallback($p) 
{
    // Преобразуем спецсимволы в HTML-представление.
    $name = htmlspecialchars($p[0]);
    // Если нет протокола, добавляем его в начало строки.  
    $href = !empty($p[1])? $name : 'http://' . $name;
    // Формируем ссылку.
    return '<a href="' . $href . '" class="hrefactivate">' . $name . '</a>';
}